
package funcionamento;

/**
 * @author Gean
 * 121151418
 * @author Eduardo
 * 121151427
 */
public class Pilha {

     private int topo=0;
     private Processo []vetor;
     
     public Pilha(int tamanho){                // método construtor da pilha
         vetor = new Processo[tamanho];
     }
    
    public void Push(Processo processo){                                         // método que adiciona elementos a pilha e tem como parametro o tipo de elemento... 
         if(getTopo() == getVetor().length){                   
             System.out.println("Pilha cheia");
         
         }else{
                getVetor()[getTopo()] = processo;
                setTopo(getTopo() + 1);
            }
         }
    
    public Processo Pop(){                                                         // método que retira valores da pilha
        if(getTopo() == 0){                  
            System.out.println("A pilha está vazia!");
             
            return getVetor()[getTopo()];
        
        }else{
                Processo retorno;                                    // variavel do tipo Processo usada para "salvar" um valor necessario
                retorno = getVetor()[getTopo()-1];
                getVetor()[getTopo()-1] = null;
                setTopo(getTopo() - 1);
                System.out.println("Pop ok");
                
            return retorno;                                          // retorna a variavel criada acima
            
        }
     }

    /*Métodos gets e sets para que seja possivel
     * acessar os atributos privados abaixo em
     * outras classes 
     */
    public int getTopo() {
        return topo;
    }

    public void setTopo(int topo) {
        this.topo = topo;
    }

    public Processo[] getVetor() {
        return vetor;
    }

    public void setVetor(Processo[] vetor) {
        this.vetor = vetor;
    }
}
